﻿/********************************************************************************
** 作者： Mick
** 邮箱： zheng_jinfan@126.com
** 主页： http://www.zhengjinfan.cn
** 创始时间：2016-2-17
** 描述：
**      [辅助类]站点脚本操作辅助类
*********************************************************************************/
using System;
using System.Web;
using System.Web.UI;

namespace BestEasyCMS.Framework.Util
{
    /// <summary>
    /// [辅助类]站点脚本操作辅助类
    /// </summary>
    public sealed class ScriptUtil
    {
        #region 构造实例

        /// <summary>
        /// 站点脚本操作辅助类
        /// </summary>
        private ScriptUtil()
        {
        }

        /// <summary>
        /// 构建类的实例对象
        /// </summary>
        public static ScriptUtil Instance
        {
            get { return new ScriptUtil(); }
        }

        #endregion 构造实例

        /// <summary>
        /// 服务器服务窗口
        /// </summary>
        /// <param name="message">需要弹出的信息</param>
        public void Alert(string message)
        {
            if (string.IsNullOrEmpty(message))
                return;

            //获取当前页面的Page属性
            var page = HttpContext.Current.Handler as Page;

            //判断Page是否存在，如果存在则输出脚本，每个脚本都使用GUID为Key
            if (page == null) return;

            //构建脚本字符串
            string script = String.Format("alert('{0}');", message);

            //向页面输出脚本
            page.ClientScript.RegisterStartupScript(typeof (string)
                                                    , new Guid().ToString("N")
                                                    , script
                                                    , true);
        }

        /// <summary>
        /// 服务器弹出窗口
        /// </summary>
        /// <param name="message">需要弹出的信息</param>
        /// <param name="url">弹出信息后跳转的URL地址</param>
        public void Alert(string message, string url)
        {
            if (string.IsNullOrEmpty(message))
                return;

            //获取当前页面的Page属性
            var page = HttpContext.Current.Handler as Page;

            //判断Page是否存在，如果存在则输出脚本，每个脚本都使用GUID为Key
            if (page == null) return;

            //构建脚本字符串
            string script = String.Format("alert('{0}');window.location.href='{1}';", message, url);

            //向页面输出脚本
            page.ClientScript.RegisterStartupScript(typeof (string)
                                                    , new Guid().ToString("N")
                                                    , script
                                                    , true);
        }
        ///// <summary>
        ///// 提示信息
        ///// </summary>
        ///// <param name="message">提示内容</param>
        ///// <param name="oType">类型</param>
        //public void TipMsg(string message, OperateType oType)
        //{
        //    if (string.IsNullOrEmpty(message))
        //        return;
        //    //获取当前页面的Page属性
        //    var page = HttpContext.Current.Handler as Page;

        //    //判断Page是否存在，如果存在则输出脚本，每个脚本都使用GUID为Key
        //    if (page == null) return;
        //    //构建脚本字符串
        //    string script = String.Format("TipMsg('{0}','" + oType + "');", message);

        //    //向页面输出脚本
        //    page.ClientScript.RegisterStartupScript(typeof(string)
        //                                            , new Guid().ToString("N")
        //                                            , script
        //                                            , true);
        //}
        ///// <summary>
        ///// 提示信息
        ///// </summary>
        ///// <param name="message">提示内容</param>
        ///// <param name="oType">类型</param>
        ///// <param name="url">跳转地址</param>
        //public void TipMsg(string message,OperateType oType, string url)
        //{
        //    if (string.IsNullOrEmpty(message))
        //        return;
        //    //获取当前页面的Page属性
        //    var page = HttpContext.Current.Handler as Page;

        //    //判断Page是否存在，如果存在则输出脚本，每个脚本都使用GUID为Key
        //    if (page == null) return;
        //    //构建脚本字符串
        //    string script = String.Format("TipMsg('{0}','" + oType + "','" + url + "');", message);

        //    //向页面输出脚本
        //    page.ClientScript.RegisterStartupScript(typeof(string)
        //                                            , new Guid().ToString("N")
        //                                            , script
        //                                            , true);
        //}
        /// <summary>
        /// 获取脚本资源
        /// </summary>
        /// <param name="sFileName">文件名</param>
        /// <returns></returns>
        public string GetScriptResourcesByFileName(string sFileName)
        {
            return "<script src=\"" + "http://" + HttpContext.Current.Request.Url.Authority + WebUtil.Instance.AppPath() + "Scripts/" + sFileName + "\" type=\"text/javascript\"></script>";
        }

        /// <summary>
        /// 输出自定义脚本信息
        /// </summary>
        /// <param name="page">当前页面指针，一般为this</param>
        /// <param name="script">输出脚本</param>
        public static void ResponseScript(Page page, string script)
        {
            page.ClientScript.RegisterStartupScript(page.GetType(), "message", "<script language='javascript' defer>" + script + "</script>");
        }
        #region 回到历史页面
        /// <summary>
        /// 回到历史页面
        /// </summary>
        /// <param name="value">-1/1</param>
        public static void GoHistory(int value)
        {
            #region

            const string js = @"<Script language='JavaScript'>
                    history.go({0});  
                  </Script>";
            HttpContext.Current.Response.Write(string.Format(js, value));
            #endregion
        }

        #endregion
        #region 关闭当前窗口
        /// <summary>
        /// 关闭当前窗口
        /// </summary>
        public static void CloseWindow()
        {
            #region
            const string js = @"<Script language='JavaScript'>
                    parent.opener=null;window.close();  
                  </Script>";
            HttpContext.Current.Response.Write(js);
            HttpContext.Current.Response.End();
            #endregion
        }
        #endregion
        #region 刷新父窗口
        /// <summary>
        /// 刷新父窗口
        /// </summary>
        public static void RefreshParent(string url)
        {
            #region
            string js = @"<script>try{top.location=""" + url + @"""}catch(e){location=""" + url + @"""}</script>";
            HttpContext.Current.Response.Write(js);
            #endregion
        }
        #endregion
        #region 刷新打开窗口
        /// <summary>
        /// 刷新打开窗口
        /// </summary>
        public static void RefreshOpener()
        {
            #region

            const string js = @"<Script language='JavaScript'>
                    opener.location.reload();
                  </Script>";
            HttpContext.Current.Response.Write(js);
            #endregion
        }

        #endregion
        #region 转向Url指定的页面
        /// <summary>
        /// 转向Url指定的页面
        /// </summary>
        /// <param name="url">连接地址</param>
        public static void JavaScriptLocationHref(string url)
        {
            #region
            string js = @"<Script language='JavaScript'>
                    window.location.replace('{0}');
                  </Script>";
            js = string.Format(js, url);
            HttpContext.Current.Response.Write(js);
            #endregion
        }
        #endregion
        #region 打开指定大小位置的模式对话框
        /// <summary>
        /// 打开指定大小位置的模式对话框
        /// </summary>
        /// <param name="webFormUrl">连接地址</param>
        /// <param name="width">宽</param>
        /// <param name="height">高</param>
        /// <param name="top">距离上位置</param>
        /// <param name="left">距离左位置</param>
        public static void ShowModalDialogWindow(string webFormUrl, int width, int height, int top, int left)
        {
            #region
            string features = "dialogWidth:" + width + "px"
                + ";dialogHeight:" + height + "px"
                + ";dialogLeft:" + left + "px"
                + ";dialogTop:" + top + "px"
                + ";center:yes;help=no;resizable:no;status:no;scroll=yes";
            ShowModalDialogWindow(webFormUrl, features);
            #endregion
        }
        #endregion
        #region 打开模式对话框
        /// <summary>
        /// 打开模式对话框
        /// </summary>
        /// <param name="webFormUrl">链接地址</param>
        /// <param name="features"></param>
        public static void ShowModalDialogWindow(string webFormUrl, string features)
        {
            string js = ShowModalDialogJavascript(webFormUrl, features);
            HttpContext.Current.Response.Write(js);
        }

        /// <summary>
        /// 打开模式对话框
        /// </summary>
        /// <param name="webFormUrl"></param>
        /// <param name="features"></param>
        /// <returns></returns>
        public static string ShowModalDialogJavascript(string webFormUrl, string features)
        {
            #region
            string js = @"<script language=javascript>							
							showModalDialog('" + webFormUrl + "','','" + features + "');</script>";
            return js;
            #endregion
        }
        #endregion
        #region 打开指定大小的新窗体
        /// <summary>
        /// 打开指定大小的新窗体
        /// </summary>
        /// <param name="url">地址</param>
        /// <param name="width">宽</param>
        /// <param name="heigth">高</param>
        /// <param name="top">头位置</param>
        /// <param name="left">左位置</param>
        public static void OpenWebFormSize(string url, int width, int heigth, int top, int left)
        {
            #region
            string js = @"<Script language='JavaScript'>window.open('" + url + @"','','height=" + heigth + ",width=" + width + ",top=" + top + ",left=" + left + ",location=no,menubar=no,resizable=yes,scrollbars=yes,status=yes,titlebar=no,toolbar=no,directories=no');</Script>";

            HttpContext.Current.Response.Write(js);
            #endregion
        }
        #endregion
        /// <summary>
        /// 页面跳转（跳出框架）
        /// </summary>
        /// <param name="url"></param>
        public static void JavaScriptExitIfream(string url)
        {
            string js = @"<Script language='JavaScript'>
                    parent.window.location.replace('{0}');
                  </Script>";
            js = string.Format(js, url);
            HttpContext.Current.Response.Write(js);
        }
    }
}